package Java.Lock;

//synchronized的用法：自动上锁和解锁
//第一步  创建资源类，定义属性和操作方法

class Ticket {
    //票数
    private int number = 30;

    //操作方法：卖票
    public synchronized void sale() {
        //判断：是否有票
        if (number > 0) {
            //当前线程名称
            System.out.println(Thread.currentThread().getName() + "卖出： " + number-- + "还剩下：" + number);
        }
    }
}

public class SeleTick {
    //第二步   创建等多个线程，调用资源类的方法
    public static void main(String[] args) {
        //创建ticke对象
        Ticket ticket = new Ticket();
        //创建三个线程
        //调用 runnable接口，匿名内部类实现
        new Thread(new Runnable() {
            @Override
            public void run() {
                //调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "AA").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                //调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "BB").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                //调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "CC").start();
    }
}
